package cn.bbs.ba.html;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.groovy.reflection.handlegen;

import cn.bbs.ba.base.BaseDto;
import cn.bbs.ba.base.PPCodeDTO;
import cn.bbs.ba.dao.BAADaoOperate;
import cn.bbs.ba.db.Fetcher;
import cn.bbs.ba.error.ErrorMsg;
import cn.bbs.ba.error.Message;
import cn.com.zzz.pk.dto.PkRoom;
import cn.com.zzz.pk.dto.PkTable;
import cn.com.zzz.pk.game.Poker;

public class ZPaiInit {
	
    /** LOG输出 */
    protected static Log _log = LogFactory.getLog(ZPaiInit.class);
    
	/** 公共参数表存放位置 **/
	private static HashMap<String, List<PPCodeDTO>> codeMap = null;
	
	/** 房间信息 **/
	private static List roomList = null;
	
	/** 当前登陆人ID **/
	private static HashMap<String, String> userMap = null;
	
	/** 初始化列表 */
	private static BaseDto baseDto = null;
	
	/** 当前开桌信息 */
	private static HashMap<String, PkTable> zhuoZiMap = null;
	
	/** 牌局中的扑克 */
	public static HashMap<String, Poker> TABLE_POKE = null;
	
	public ZPaiInit(){
		init();
	}
	
	/**
	 * 初始化函数，在系统启动的时候加载
	 */
	public static void init() {
		
		// 清除错误信息
		ErrorMsg.remove();
		Message.initMsg();
		// 加载初始化参数
		ZPaiConstant.initAllPara();
		codeMap = new HashMap<String, List<PPCodeDTO>>();
		roomList = new ArrayList();
		userMap = new HashMap<String, String>();
		baseDto = new BaseDto();
		zhuoZiMap = new HashMap<String, PkTable>();
		TABLE_POKE = new HashMap<String, Poker>();
		// 初始化公共参数
		setCodeMap();
		// 初始化大厅信息
		initRoom();
		
	}
	
	/**
	 * 把所有的参数读出
	 */
	private static void setCodeMap() {
		HashMap<String, String> strMap = new HashMap<String, String>();
		strMap.put(BAADaoOperate.SQL_ID, "searchCode");
		Fetcher<PPCodeDTO> dtoFetch = BAADaoOperate.search(strMap, PPCodeDTO.class);
		String strId = "";
		List<PPCodeDTO> listDto = new ArrayList<PPCodeDTO>();
		for (int i = 1; i <= dtoFetch.size(); i++) {
			PPCodeDTO dto = dtoFetch.get(i);
			if (!"".equals(strId) && !strId.equals(dto.getCodeId())) {
				codeMap.put(strId, listDto);
				listDto = new ArrayList<PPCodeDTO>();
			}
			strId = dto.getCodeId();
			listDto.add(dto);
		}
		codeMap.put(strId, listDto);
	}
	
	/**
	 * 取大厅信息
	 */
	private static void initRoom() {
		
		HashMap<String, String> strMap = new HashMap<String, String>();
		strMap.put(BAADaoOperate.SQL_ID, "searchRoomInfo");
		Fetcher<PkRoom> dtoFetch = BAADaoOperate.search(strMap, PkRoom.class);
		String strParentid = "";
		String strLevel = "";
		List<PkRoom> listDto = new ArrayList<PkRoom>();
		BaseDto roomMapTemp = new BaseDto();
		PkRoom dto = null;
		for (int i = 1; i <= dtoFetch.size(); i++) {
			dto = dtoFetch.get(i);
			// 桌子的时候
			if ("3".equals(strLevel) 
					&& !"".equals(strParentid)
					&& !strParentid.equals(dto.getParentid())) {
				roomMapTemp.put(strParentid, listDto);
				listDto = new ArrayList<PkRoom>();
			}
			// 房间的时候
			if ("2".equals(dto.getRoomLevel())) {
				// 把桌子加入房间
				dto.setValue("table", roomMapTemp.get(dto.getRoomId()));
			}
			// 房间的时候，所属游戏变更的时候
			if ("2".equals(strLevel)
					&& !"".equals(strParentid)
					&& !strParentid.equals(dto.getParentid())) {
				// 把桌子加入房间
				roomMapTemp.put(strParentid, listDto);
				listDto = new ArrayList<PkRoom>();
			}
			// 游戏的时候
			if ("1".equals(dto.getRoomLevel())) {
				// 把桌子加入房间
				dto.put("children", roomMapTemp.get(dto.getRoomId()));
				dto.setValue("name", dto.getRoomId());
				roomList.add(dto);
			}
			strParentid = dto.getParentid();
			strLevel = dto.getRoomLevel();
			listDto.add(dto);
		}
	}
	
	/**
	 * 取出房间信息
	 * @return
	 */
	public static List getRoomList() {
		return roomList;
	}

	
	/**
	 * 取当前用户是否登录
	 * @return
	 */
	public static HashMap<String, String> getUserMap() {
		return userMap;
	}
	
	/**
	 * 取出放回的ID
	 * @return
	 */
	public static HashMap<String, List<PPCodeDTO>> getCodeMap() {
		return codeMap;
	}
	
	/**
	 * 主页显示信息列表
	 * @return
	 */
	public static BaseDto getBaseDto() {
		return baseDto;
	}
	
	/**
	 * 取出当前桌子信息
	 * @return
	 */
	public static HashMap<String, PkTable> getTable(){
		return zhuoZiMap;
	}
	
	/**
	 * 取出指定房间信息
	 * @return
	 */
	public static List getTableList(String strRoomId){
    	Iterator iterator2= zhuoZiMap.entrySet().iterator(); 
    	List<BaseDto> retList = new ArrayList<BaseDto>();
    	PkTable base = null;
    	while(iterator2.hasNext()){  
    		Map.Entry  entry= (Map.Entry)iterator2.next(); 
    		base = (PkTable)entry.getValue();
    		// 如果桌子号码相同则返回
    		if (strRoomId.equals(base.getValue("roomId"))) {
    			retList.add(base);
    		}
    	}
		return retList;
	}
}
